package cn.tedu.controller;

import cn.tedu.entity.Book;
import cn.tedu.entity.CartItem;
import cn.tedu.service.BookService;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;


/**
 * 将书籍添加到购物车
 */
@WebServlet("/buyBook")
public class BuyServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    private BookService bookService = new BookService();

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        // 购物车的东西：游客也可以访问，游客离开后就成了垃圾数据，需要清理，购物车的生命周期也就结束了，刚好和session保持了一致，所以存到session中

        /*
         * 1.获取书籍
         * 2.创建或者获取一个购物车
         * 3.将商品添加到购物车中
         * 4.返回数据
         * */
        String bookId = request.getParameter("bookId");
        Book book = bookService.getBookById(bookId);

        // 获取购物车
        HttpSession session = request.getSession();
        Map<String, CartItem> cart = (Map<String, CartItem>) session.getAttribute("cart");

        // 将商品添加到购物车，判断购物车是否存在
        if (cart != null) {
            // 从购物车获取该商品
            CartItem cartItem = cart.get(bookId);
            // 判断商品是不是第一次添加
            if (cartItem != null) {
                // 非第一次添加，数量加1
                cartItem.setAmount(cartItem.getAmount() + 1);
            } else {
                // 第一次添加，构建商品信息，并保存到购物车
                createItems(bookId, book, cart);
            }
        } else {
            // 购物车不存在情况，先创建购物车，再添加商品到购物车
            cart = new HashMap<String, CartItem>();
            session.setAttribute("cart", cart);
            createItems(bookId, book, cart);
        }

        // 返回结果
        PrintWriter writer = response.getWriter();
        writer.write("添加购物车成功！");
//		writer.write("1");
    }

    private void createItems(String bookId, Book book, Map<String, CartItem> cart) {
        CartItem item = new CartItem();
        item.setId(book.getId());
        item.setBookName(book.getProductName());
        item.setDangPrice(book.getDangPrice());
        item.setFixedPrice(book.getFixedPrice());
        item.setAmount(1);
        cart.put(bookId, item);
    }

}
